package com.example.util.rsa;
import java.io.IOException;
import java.security.MessageDigest;

import com.example.util.ByteUtil;


/**

 * MD5加密解密工具类<br>

 * 

 * 

 * 关于MD5的算法请参考RFC1321规范<br>

 * RFC1321给出了Test suite用来检验你的实现是否正确:<br>

 * MD5 ("") =d41d8cd98f00b204e9800998ecf8427e <br>

 * MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661<br>

 * MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72<br>

 * MD5 ("message digest") =f96b697d7cb7938d525a2f31aaf161d0<br>

 * MD5 ("abcdefghijklmnopqrstuvwxyz") =c3fcd3d76192e4007dfb496cca67e13b
 * 传入参数：一个字节数组 传出参数：字节数组的 MD5 结果字符串

 */

public class MD5Encoder {

 

    /**

     * 对二进制数组进行MD5算法加密,并将加密结果按照建行的协议算法进行转换

     * @param source

     * @return

     */

    public static byte[] encode(byte[] source) {

       byte[] result = new byte[0];

 

       try {

           MessageDigest md = MessageDigest.getInstance("MD5");

           md.update(source);

 

           // MD5 的计算结果是一个 128 位的长整数，用字节表示就是 16 个字节

           result = md.digest();

 

       } catch (Exception e) {

           e.printStackTrace();

       }

       return result;

    }

 

    public static void main(String xu[]) throws IOException { // 计算 "a" 的 MD5

       // 代码，应该为：0cc175b9c0f1b6a831c399e269772661

       System.out.println(ByteUtil.byteToChar(MD5Encoder.encode("a".getBytes())));
      
    }

 

}

